package com.str;

import java.util.Arrays;
import java.util.Locale;

/**
 * 常用方法:
 *
 */
public class Str_03 {
    public static void main(String[] args) {
        String s = "nfksdmgijsdngisdmnu3454645765980766";
        //length():获取到字符串的长度
        int len = s.length();
        System.out.println("s的长度:" + len);


        //substring:获取到部分字符串
        //String substring(int beginIndex)
        //  返回一个字符串，该字符串是此字符串的子字符串。
        //String substring(int beginIndex, int endIndex) 包含开始的下标,不包含结束下标
        //  返回一个字符串，该字符串是此字符串的子字符串。

        String s1 = s.substring(3);
        System.out.println("s1 = " + s1);
        String s2 = s.substring(3,10);
        System.out.println("s2 = " + s2);

        //boolean startsWith(String prefix)
        //测试此字符串是否以指定的前缀开头。
        //boolean startsWith(String prefix, int toffset)
        //测试在指定索引处开始的此字符串的子字符串是否以指定的前缀开头。

        String s3 = "C:\\soft\\screener.exe";
        boolean f1 = s3.startsWith("C:");
        System.out.println("f1 = " + f1);//f1 = true


        //boolean endsWith(String suffix)
        //测试此字符串是否以指定的后缀结尾。
        boolean f2 = s3.endsWith(".exe");
        System.out.println("f2 = " + f2);//f2 = true


        //boolean contains(CharSequence s)
        //  当且仅当此字符串包含指定的char值序列时才返回true。
        String s4 = "Masaaki kiskibe";
        //           012345678901234
        boolean f3 = s4.contains("ki");
        System.out.println("s4字符串中是否包含ki字符串:" + f3);//s4字符串中是否包含ki字符串:true

        //int indexOf(int ch)
        //  返回指定字符第一次出现的字符串内的索引。
        //int indexOf(int ch, int fromIndex)
        //  返回指定字符第一次出现的字符串内的索引，以指定的索引开始搜索。
        //int indexOf(String str)
        //  返回指定子字符串第一次出现的字符串内的索引。
        //int indexOf(String str, int fromIndex)
        //  返回指定子串的第一次出现的字符串中的索引，从指定的索引开始。
        int index1 = s4.indexOf("ki");
        System.out.println("index1 = " + index1);//index1 = 5

        //int lastIndexOf(int ch)
        //  返回指定字符的最后一次出现的字符串中的索引。
        //int lastIndexOf(int ch, int fromIndex)
        //  返回指定字符的最后一次出现的字符串中的索引，从指定的索引开始向后搜索。
        //int lastIndexOf(String str)
        //  返回指定子字符串最后一次出现的字符串中的索引。
        //int lastIndexOf(String str, int fromIndex)
        //  返回指定子字符串的最后一次出现的字符串中的索引，从指定索引开始向后搜索。
        int index2 = s4.lastIndexOf("kk");
        System.out.println("index2 = " + index2);//index2 = 11

        //将字符串转换成为byte[]或者char[]类型数组

        //byte[] getBytes()
        //  使用平台的默认字符集将此 String编码为字节序列，将结果存储到新的字节数组中。
        //byte[] getBytes(Charset charset)
        //  使用给定的charset将该String编码为字节序列，将结果存储到新的字节数组中。
        //byte[] getBytes(String charsetName)
        //  使用命名的字符集将此 String编码为字节序列，将结果存储到新的字节数组中。
        byte[] arr_03 = s4.getBytes();
        System.out.println(Arrays.toString(arr_03));

        //char[] toCharArray()
        //将此字符串转换为新的字符数组。
        char[] arr_04 = s4.toCharArray();
        System.out.println(Arrays.toString(arr_04));

        //boolean equals(Object anObject)  不忽略大小写比较两个字符串是否相同
        //  将此字符串与指定对象进行比较。
        //boolean equalsIgnoreCase(String anotherString) 忽略大小写比较两个字符串是否相同
        //  将此 String与其他 String比较，忽略案例注意事项。

        String s5 = "abc";
        String s6 = "ABC";
        System.out.println(s5.equals(s6));
        System.out.println(s5.equalsIgnoreCase(s6));

        //boolean isEmpty() 判断一个字符串是否为空
        //  返回 true如果，且仅当 length()为 0 。
        boolean f4 = s3.isEmpty();
        System.out.println("f4 = " + f4);

        //char charAt(int index)
        //  返回 char指定索引处的值。
        //注意:防止字符串索引越界的异常
        char c1 = s4.charAt(2);
        System.out.println("c1 = " + c1);

        //大小写转换
        //String toLowerCase()
        //  将所有在此字符 String使用默认语言环境的规则，以小写。
        //String toLowerCase(Locale locale)
        //  将所有在此字符 String ，以降低使用给定的规则情况下 Locale 。
        //String toUpperCase()
        //  将所有在此字符 String使用默认语言环境的规则大写。
        //String toUpperCase(Locale locale)
        //  将所有在此字符 String使用给定的规则，大写 Locale 。

        String s7 = "IndexOut";
        String s8 = s7.toLowerCase();
        System.out.println(s8);//indexout

        String s9 = s8.toUpperCase();
        System.out.println("s9 = " + s9);//s9 = INDEXOUT

        //字符串之间的替换
        //String replace(char oldChar, char newChar)
        //  返回从替换所有出现的导致一个字符串 oldChar在此字符串 newChar 。
        //String replace(CharSequence target, CharSequence replacement)
        //  将与字面目标序列匹配的字符串的每个子字符串替换为指定的字面替换序列。

        //String replaceAll(String regex, String replacement)
        //  用给定的替换替换与给定的 regular expression匹配的此字符串的每个子字符串。
        //String replaceFirst(String regex, String replacement)
        //  用给定的替换替换与给定的 regular expression匹配的此字符串的第一个子字符串。

        String str = "this1 is2 my3 homework4! I5 must6 finish7 it8";
        String s10 = str.replace('i','*');
        System.out.println(s10);

        String s11 = str.replace("is","$");
        System.out.println(s11);

        //将所有的数字替换成为"￥"
        String s12 = str.replaceFirst("[0-9]","￥");
        System.out.println(s12);

        //String concat(String str)
        //  将指定的字符串连接到该字符串的末尾。
        //static String join(CharSequence delimiter, CharSequence... elements)
        //  返回一个新的字符串，由 CharSequence elements的副本组成，并附有指定的delimiter的 delimiter 。
        //static String join(CharSequence delimiter, Iterable<? extends CharSequence> elements)
        //  返回一个新 String的副本组成 CharSequence elements与指定的副本一起加入 delimiter 。

        String s13 = "hello";
        String s14 = s13.concat("world");
        System.out.println(s14);//helloworld

        String s15 = String.join("-","10","20","30","40");
        System.out.println(s15);//10-20-30-40

        //String trim() 去掉字符串前后的空格
        //返回一个字符串，其值为此字符串，并删除任何前导和尾随空格。
        String s16 = "   i love java   ";
        System.out.println(s16.trim());

        //int compareTo(String anotherString)
        //  按字典顺序比较两个字符串。
        // 0表示两个字典顺序相同  <0 代表比字符串参数小  >0 代表比字符串参数大
        int end = "a".compareTo("b");
        System.out.println(end);//-1

    }
}
